package com.wanfengrm.study.letcode;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * letcode 每日一题
 * @author siyuhui
 */
public class DayCode {
    private static final Logger logger = LoggerFactory.getLogger(DayCode.class);


    /**
     * 将一维数组转变成二维数组
     * original中下标从 0到 n - 1（都 包含 ）的元素构成二维数组的第一行，下标从 n到 2 * n - 1（都 包含）的元素构成二维数组的第二行，依此类推。
     * 请你根据上述过程返回一个 m x n 的二维数组。如果无法构成这样的二维数组，请你返回一个空的二维数组。
     * @param original 一维整数数组
     * @param m 行
     * @param n 列
     * @date 2022-01-01
     */
    public static int[][] construct2DArray(int[] original, int m, int n){
        int[][] result = null;
        int total = original.length;
        if (total == m*n){
            result = new int[m][n];
            for (int i = 0; i < total; i++){
                int [] row = new int[n];
                int rowIndex = i / n;
                int colIndex = i % n;
                result[rowIndex][colIndex] = original[i];
            }
        }else {
            result = new int[0][0];
        }
        return result;
    }

    /**
     * 将一维数组转变成二维数组(官方解决)
     * original中下标从 0到 n - 1（都 包含 ）的元素构成二维数组的第一行，下标从 n到 2 * n - 1（都 包含）的元素构成二维数组的第二行，依此类推。
     * 请你根据上述过程返回一个 m x n 的二维数组。如果无法构成这样的二维数组，请你返回一个空的二维数组。
     * @param original 一维整数数组
     * @param m 行
     * @param n 列
     * @date 2022-01-01
     */
    public static int[][] construct2DArray2(int[] original, int m, int n){
        if (original.length != m * n) {
            return new int[0][];
        }
        int[][] ans = new int[m][n];
        for (int i = 0; i < original.length; i += n) {
            System.arraycopy(original, i, ans[i / n], 0, n);
        }
        return ans;
    }

    public int lastRemaining(int n) {

        return n;
    }

    public static void main(String[] args) {
        int original[] = {1,2,3,4};
        int m = 2, n = 2;
        int[][] result = construct2DArray2(original,m,n);
        logger.info("result is {}", result);
    }
}
